﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
using Estructuras.Comunes;

namespace Estructuras.Funciones.Analizar
{
    /// <summary>
    /// Clase que representa un registro no encontrado.
    /// </summary>
    public class RegistroNoEncontrado
    {
        /// <summary>
        /// Registro original.
        /// </summary>
        public string RegistroOriginal = string.Empty;

        /// <summary>
        /// Patrón obtenido.
        /// </summary>
        public string PatronRegistro = string.Empty;

        /// <summary>
        /// Campo en el que se encuentra el registro.
        /// </summary>
        public string Campo = string.Empty;
    }

    /// <summary>
    /// Almacena las propiedades de un elemento específico.
    /// </summary>
    public class PRegistrosNoEncontrados : Propiedades
    {
        /// <summary>
        /// Lista Registros no encontrados.
        /// </summary>
        public List<RegistroNoEncontrado> ListaRegistros
        {
            get
            {
                if (!this.contienePropiedad(CRegistrosNoEncontrados.ListaRegistros))
                    this.addPropiedad(CRegistrosNoEncontrados.ListaRegistros, new List<RegistroNoEncontrado>());
                return (List<RegistroNoEncontrado>)this.getPropiedad(CRegistrosNoEncontrados.ListaRegistros);
            }
            set
            {
                this.setOrAddPropiedad(CRegistrosNoEncontrados.ListaRegistros, value);
            }
        }

        /// <summary>
        /// Constructor por defecto.
        /// </summary>
        public PRegistrosNoEncontrados()
            : base()
        {
        }

        /// <summary>
        /// Escribe los parámetros al fichero XML indicado.
        /// </summary>
        /// <param name="fichero">Stream de salida</param>
        public void escribir(TextWriter fichero)
        {
            try
            {
                XmlWriter xml = XmlWriter.Create(fichero);
                EscribirXml.InicioElemento(xml, CRegistrosNoEncontrados.NodoRaiz);
                foreach (RegistroNoEncontrado registro in this.ListaRegistros)
                {
                    EscribirXml.InicioElemento(xml, CRegistrosNoEncontrados.NodoRegistro);
                    EscribirXml.EscribeNodo(xml, CRegistrosNoEncontrados.NodoRegistroRegistroOriginal, registro.RegistroOriginal);
                    EscribirXml.EscribeNodo(xml, CRegistrosNoEncontrados.NodoRegistroCampo, registro.Campo);
                    EscribirXml.EscribeNodo(xml, CRegistrosNoEncontrados.NodoRegistroFormatoRegistro, registro.PatronRegistro);
                    EscribirXml.FinElemento(xml);
                }
                EscribirXml.FinElemento(xml);
                EscribirXml.Flush(xml);
                EscribirXml.Close(xml);
            }
            catch (Exception ex)
            {
                throw new Excepcion(Estructuras.Comunes.Constantes.ERROR_ESCRIBIR_FICHERO_REGISTROS_NO_ENCONTRADOS, ex, Estructuras.Comunes.Constantes.CODIGO_ERROR_ESCRIBIR_FICHERO_REGISTROS_NO_ENCONTRADOS);
            }
        }
    }
}
